// 实现new 关键字 , new的时候发生了什么
/* 
    1 创建一新对象
    2  新对象的 __proto__ 指向原型对象的prototype
    3 把this 和参数 赋值给新函数,
    4 执行新函数, 如果结果是Object, 返回结果, 否则返回新创建的函数
*/

function myNew(fn, ...args) {
    const newObj = {}
    newObj.__proto__ = fn.prototype;
    let result = fn.apply(newObj, args);
    return result instanceof Object ? result : newObj;
}

function Person(name) {
    this.name = name;
    this.sayName = function () {
        console.log("name---", this.name)
    }
}

let p = myNew(Person, "judy")
p.sayName()